//
//  UIViewController+HHPage.h
//  Pods
//
//  Created by Basic on 2017/8/2.
//  页面标准元素定义
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIViewController (HHPage)
//MARK: - 通用属性
/// 是否可以替换(NO,不开启替换，使用原生的),UIViewController内部会根据class前缀判断，系统VC 不会去替换，UINavigationController会使用rootVC的该属性
@property (nonatomic, assign) BOOL  bc_enableSwizzle;
/// 是否禁用在这个页面上进行route跳转，默认NO，不禁用
@property (nonatomic, assign) BOOL  bc_disableRoute;
/// 是否禁用右滑动返回手势
@property (nonatomic, assign) BOOL  bc_disablePopGesture;

/// 是否第一次进入appear，只要进入过 willDisAppear，再次appear之后，都不算第一次appear。 一般用于 willAppear/didAppear里过滤重复执行的任务。
@property (assign, nonatomic, readonly) BOOL  bc_firstAppear;
/// 页面是否是appear的状态，外面无需设置，willDisAppear自动设置成true,willDisAppear自动设置成false
@property (assign, nonatomic, readonly) BOOL  bc_isAppear;

//MARK: - 状态栏相关
/// 状态栏style，如果未设置，默认 取theme.json文件里的 statusBarStyle 值
@property (assign, nonatomic) UIStatusBarStyle  bc_statusBarStyle;

//MARK: - 导航栏相关
/// 是否隐藏 navigationBar
@property (assign, nonatomic) BOOL  hh_navigationBarHidden;
/// 隐藏 返回按钮，默认NO
@property (assign, nonatomic) BOOL  hh_hideBackItem;
/// 导航栏返回图片 默认nil 使用是navBackimg
@property (strong, nonatomic, nullable) UIImage   *hh_navBackImage;
/// 对应navigationBar 的 titleTextAttributes */
@property (copy, nonatomic, nullable)   NSDictionary<id, id> *hh_titleAttributes;
/// 分割线颜色，默认是 BCComConfig.config.navSplitColor
@property (strong, nonatomic) UIColor   *hh_splitColor;
/// 导航栏背景 颜色，默认是 BCComConfig.config.navBgColor
@property (strong, nonatomic) UIColor   *hh_navBgColor;
/// 导航栏标题 颜色，默认是 nil,使用 navTitleColor
@property (strong, nonatomic, nullable) UIColor *hh_navTitleColor;
/// 导航栏背景 渐变 起始颜色，默认 nil
@property (nonatomic, strong, nullable) UIColor *hh_navBgStartColor;
/// 导航栏背景 渐变 起始point，默认 (0,0)
@property (nonatomic, assign) CGPoint hh_navBgStartPoint;
/// 导航栏背景 渐变 结束颜色，默认 nil
@property (nonatomic, strong, nullable) UIColor *hh_navBgEndColor;
/// 导航栏背景 渐变 结束point，默认 (0,0)
@property (nonatomic, assign) CGPoint hh_navBgEndPoint;

//MARK: - 键盘相关
/// 是否touch 自动收起键盘，默认NO，不收起
@property (nonatomic, assign) BOOL  hh_touchEndEditing;
/// 点击view 自动收起 键盘局block
@property (nonatomic, copy, nullable) BOOL(^hh_touchEndEditBlock)(UITapGestureRecognizer *gesture);
/// 不响应touch的类名，默认 nil
@property (nonatomic, strong, nullable) NSArray *hh_rejectTouchViews;

//MARK: - 旋转属性
/// 全局默认的旋转开关，默认YES，和系统shouldAutorotate方法一样，返回YES
@property (nonatomic, assign, class) BOOL hh_shouldAutorotate;
/// 是否自定义旋转属性，不使用默认的旋转属性（hh_shouldAutorotate）。默认NO，即使用 hh_shouldAutorotate
@property (nonatomic, assign) BOOL hh_customAutorotate;
/// 全局默认的 支持的方向，默认 UIInterfaceOrientationMaskPortrait
@property (nonatomic, assign, class) UIInterfaceOrientationMask hh_supportedOrientations;
/// 是否自定义 支持的方向，默认 NO, 即使用全局的 hh_supportedOrientations
@property (nonatomic, assign) BOOL hh_customOrientations;

//MARK: - 刘海适配相关
/// 底部安全view，用于显示指示器底部的view，默认nil,调用 bc_showBottomSafeView 才会显示。
@property (nonatomic, strong, nullable) UIView *bc_bottomSafeView;

//MARK: - 刘海适配相关API
/// 显示自定义的底部安全view
- (void)bc_showBottomSafeView;

//MARK: - helper
/// 查找最顶层 vc
+ (UIViewController *)bc_topPage;
/// 查找某个class的vc
/// @param pageCls class
+ (UIViewController *)bc_findPage:(Class )pageCls;

/// 查找当前UINavigationController
+ (UINavigationController *)bc_navPage;
/// 拨打电话
/// @param phoneNum 电话号码
- (void)bc_callPhone:(NSString*)phoneNum;

@end

NS_ASSUME_NONNULL_END
